/*
 * AndQuery.cpp
 *
 *  Created on: 2020年12月13日
 *      Author: san
 */

#include "AndQuery.h"

TextQuery::QueryResult AndQuery::eval(const TextQuery &text)
{
	// 通过 Query 成员lhs 和rhs进行的虚调用
	// 通过eval返回每个运算对象的QueryResult
	TextQuery::QueryResult right = rhs.eval(text), left = lhs.eval(text);
	// 保存查询交集的set中
	auto ret_lines = std::make_shared<std::set<line_no>>();

	// 保存交集
	std::set_intersection(
			left.begin(), left.end(),
			right.begin(), right.end(),
			std::inserter(*ret_lines, ret_lines->begin()));

	return TextQuery::QueryResult(rep(), ret_lines, left.get_file());
}
